package vg.services.graph_layout_manager.interfaces;

import java.util.Map;

import vg.services.graph_view_manager.interfaces.graph_view.AGraphView;
import vg.services.graph_view_manager.interfaces.graph_view.graph_lib_depending.AMainGraphComponent;
import vg.services.progress_manager.interfaces.IProgressTask;

/**
 * This interface control settings for layout.
 * @author dkolbin
 *
 */
public interface IGraphLayout {
	public final static String DEF_LAYOUT_SETTINGS_DEFIS = "LAYOUT_SETTINGS_";
	
	/**
	 * This method sets all setting for layout
	 */
	public void setSettings(Map<String, Object> settings);

	/**
	 * This method returns all setting for layout
	 */
	public Map<String, Object> getSettings();
	
	/**
	 * Execute layout.
     * @param mainGraphComponent - argument, need for any specifically layouts.
	 */
	public void execute(AGraphView graphView, AMainGraphComponent mainGraphComponent);

    /**
     * Gets layout's progress
     * Don't change it, read only.
     */
    public IProgressTask getProgress();
    
    /**
     * Returns name of layout.
     */
    public String getName();
}
